遺傳算法(GAs)是一種基於自然演化原理的隨機全域搜尋啟發式方法,特別是達爾文主義的「適者生存」與基因重組原則。
1. 表示框架
- 標準遺傳算法(Canonical GAs):使用二進位或格雷碼字串表示法來編碼決策變數。
- 實數編碼遺傳算法(RCGAs):直接操作浮點向量,對於連續優化問題通常更高效。
2. 進化循環
一種反覆進行評估、選擇與繁殖的迭代過程。一個關鍵概念是區分 基因型(編碼後的位元字串/染色體)與 表現型(實際問題空間中解碼後的決策變數值)。
從二進位字串映射至實數值 $x \in [a, b]$ 的公式如下:
$$x = a + \frac{decimal\_value \times (b - a)}{2^L - 1}$$
其中 $L$ 為染色體的位元長度。
漢明斷崖
請留意標準二進位編碼中的 漢明斷崖——即相鄰的十進位數字(如 7 和 8)具有截然不同的二進位位元模式(
0111對比1000),這使得遺傳算法難以執行局部搜尋。
Python 實作:二進位轉實數解碼
問題 1
為什麼格雷碼在遺傳算法中常被優先於標準二進位碼使用?
問題 2
如果突變機率(p)設得過高(例如:p = 0.5),可能的結果是什麼?
案例研究:橋梁組件優化
請閱讀以下情境並回答問題。
您正在優化一座橋梁組件的設計,其中決策變數為「材質厚度」。
- 厚度必須介於 0.0mm 與 10.23mm之間。
- 您使用的是標準遺傳算法,採用 10 位元的二進位字串表示法。
Q
1. 若某個體的染色體為
0000000000,其解碼後的厚度是多少?答案:0.0mm
二進位字串
二進位字串
0000000000 在十進位中等於 0。使用公式 $x = a + \frac{decimal \times (b-a)}{2^L - 1}$,可得 $0.0 + \frac{0 \times (10.23 - 0.0)}{1023} = 0.0$。
Q
2. 計算此 10 位元設定下的搜尋精確度(厚度可能最小的變化量)。
答案:0.01mm
精確度定義為範圍除以最大可能的十進位值。$\frac{10.23 - 0}{2^{10} - 1} = \frac{10.23}{1023} = 0.01mm$。
精確度定義為範圍除以最大可能的十進位值。$\frac{10.23 - 0}{2^{10} - 1} = \frac{10.23}{1023} = 0.01mm$。
Q
3. 在選擇過程中,個體 A 的適應度為 10,個體 B 的適應度為 30。使用輪盤賭選擇法,選中 B 的機率是多少?
答案:75%
總適應度 = $10 + 30 = 40$。選中 B 的機率 = $\frac{30}{40} = 0.75$,即 75%。(比例為 3:1)。
總適應度 = $10 + 30 = 40$。選中 B 的機率 = $\frac{30}{40} = 0.75$,即 75%。(比例為 3:1)。